package com.example.crazyfall;

import org.andengine.opengl.util.GLState;
import org.andengine.engine.camera.Camera;
import org.andengine.entity.scene.menu.MenuScene;
import org.andengine.entity.scene.menu.MenuScene.IOnMenuItemClickListener;
import org.andengine.entity.scene.menu.item.IMenuItem;
import org.andengine.entity.scene.menu.item.SpriteMenuItem;
import org.andengine.entity.scene.menu.item.decorator.ScaleMenuItemDecorator;
import org.andengine.entity.sprite.Sprite;

import com.example.crazyfall.SceneManager.SceneType;

//Clase que crea la escena del menu e implementa la parte de IOnMenuItemClickListener que sirve para cuando se da click en el menu
//Tambien extiende la escena base y sus metodos
public class MainMenuScene extends BaseScene implements IOnMenuItemClickListener{

	//Metodo para crear la escena del menu
	@Override
	public void createScene() {
		// TODO Auto-generated method stub
	    createBackground();
	    createMenuChildScene();
		
	}

	//Metodo para salir del sistema cuando se oprime el boton de regreso
	@Override
	public void onBackKeyPressed() {
	    System.exit(0);		
	}

	//Metodo que te regresa el tipo de esena para esta clase 
	@Override
	public SceneType getSceneType() {
		// TODO Auto-generated method stub
	    return SceneType.SCENE_MENU;
	}

	//Metodo que se usa para disponer de una clase
	@Override
	public void disposeScene() {
		// TODO Auto-generated method stub
		
	}
	
	//Metodo que se usa para generar el fondo del menu
	private void createBackground()
	{
	    attachChild(new Sprite(278, 375, resourcesManager.fondoMenu, vbom)
	    {
	    	
	        @Override
	        protected void preDraw(GLState pGLState, Camera pCamera) 
	        {
	            super.preDraw(pGLState, pCamera);
	            pGLState.enableDither();
	        }
	    });
	}
	
	//Definicion de las variables para crearle sus hijos a la escena
	private MenuScene menuChildScene;
	private final int MENU_JUEGO = 0;
	private final int MENU_AJUSTES = 1;
	private final int MENU_AYUDA = 2;

	
	//Metodo que se usa para crear los botones y setar pocisiones de los hijos del menu
	private void createMenuChildScene()
	{
	    menuChildScene = new MenuScene(camera);
	    menuChildScene.setScale(0.9f);
	    menuChildScene.setPosition(200, 300);
	    
	    
	    final IMenuItem playMenuItem = new ScaleMenuItemDecorator(new SpriteMenuItem(MENU_JUEGO, resourcesManager.juegoRegion, vbom), 1.2f, 1);
	    final IMenuItem optionsMenuItem = new ScaleMenuItemDecorator(new SpriteMenuItem(MENU_AJUSTES, resourcesManager.opcionRegion, vbom), 1.2f, 1);
	    final IMenuItem ayudaMenuItem = new ScaleMenuItemDecorator(new SpriteMenuItem(MENU_AYUDA, resourcesManager.ayudaRegion, vbom), 1.2f, 1);

	    menuChildScene.addMenuItem(playMenuItem);
	    menuChildScene.addMenuItem(optionsMenuItem);
	    menuChildScene.addMenuItem(ayudaMenuItem);

	    
	    
	    menuChildScene.buildAnimations();
	    menuChildScene.setBackgroundEnabled(false);
	    
	    playMenuItem.setPosition(playMenuItem.getX() - 200, playMenuItem.getY() - 220);
	    optionsMenuItem.setPosition(optionsMenuItem.getX() - 200, optionsMenuItem.getY() - 320);
	    ayudaMenuItem.setPosition(ayudaMenuItem.getX() - 200, ayudaMenuItem.getY() - 420);
	    
	    menuChildScene.setOnMenuItemClickListener(this);
	    
	    setChildScene(menuChildScene);
	}
	
	//Metodo que usa un switch para el control de diferentes botones al momeento de dar un click
	@Override
	public boolean onMenuItemClicked(org.andengine.entity.scene.menu.MenuScene pMenuScene,IMenuItem pMenuItem, float pMenuItemLocalX, float pMenuItemLocalY) {
		// TODO Auto-generated method stub
		  switch(pMenuItem.getID())
	        {
	        case MENU_JUEGO:
	    		SceneManager.getInstance().loadMenuScene(engine);
	            return true;
	        case MENU_AJUSTES:
	    		SceneManager.getInstance().loadConfigScene(engine);
	            return true;
	        case MENU_AYUDA:
	    		SceneManager.getInstance().loadHelpScene(engine);
	            return true;
	        default:
	            return false;
	    }
	}


	

}
